package cn.echogo.framework.inter;

public interface Executable<P> {
	
	/**
	 * 执行异步任务
	 * @param id
	 * @param p
	 */
	public void execute(int id, P p);
	
	/**
	 * 取消任务
	 * @param id
	 */
	public void cancelExecute(int id);
	
	/**
	 * 前置事件
	 * @param id
	 * @param p
	 * @return true则执行onExecute的逻辑，否则不执行
	 */
	public boolean onPreExecute(int id, P p);
	
	/**
	 * 执行异步任务事件
	 * @param id
	 * @param p
	 * @return
	 * @throws Exception
	 */
	public abstract P onExecute(int id,P p) throws Exception;
	
	/**
	 * 后置事件
	 * @param id
	 * @param p
	 */
	public abstract void onPostExecute(int id, P p);
	
	/**
	 * 异常事件
	 * @param e
	 */
	public abstract void onException(int id, P p, Exception e);

}
